package cn.tedu.util;

import java.util.Arrays;
import java.util.Random;
//测试 冒泡排序
public class ArrayUtils {
    /**
     * 这个方法用来产生指定长度的随机数组
     * @param length 数组的长度
     * @return 随机数组
     */
    public static int[] randomArr(int length){
        //1,创建数组
        int[] a = new int[length];
        //2,遍历数组,并赋予随机数
        for (int i = 0; i < a.length; i++) {
            a[i] = new Random().nextInt(100);//产生100以内的随机数
        }
        //3,把产生的随机数组返回调用位置
        return a ;
    }
    /**
     * 这个方法用来给无序的 int[] 排序
     * @param a  是int[]
     */
    public static void bubbleSort(int[] a){
        //2,冒泡排序--升序
        //-1 的原因是: 让5个数字,比4轮 -- 也就是让外循环执行4次
        for (int i = 0; i < a.length-1 ; i++) {//外循环--控制轮数
            //TODO 优化:因为每轮参与比较的数字变少了,变化的规律
            // 就是第一轮比4次,第二轮比3次,第三轮比2次,第四轮比1次.
            // 优化前:是每一轮都要比4次.
//      for (int j = 0; j < a.length-1; j++) {//内循环--控制每轮要比几次--优化前:每轮比4次,浪费!!
            //TODO - i 优化后,应该让比较次数依次减少,规律是
            // 第一轮-0,第二轮-1,第三轮-2,第四轮-3. 找一个变量的变化规律是  0 1 2 3
            for (int j = 0; j < a.length-1 - i ; j++) {//优化后,每轮的次数都在减少!!
                //1,相邻元素比较 a[j]  a[j+1]
                if(a[j] > a[j+1]){//升序,前面的大就换位置
                    //2,交换位置
                    int c = a[j] ;
                    a[j] = a[j+1] ;
                    a[j+1] = c ;
                }
            }
        }
        System.out.println( Arrays.toString(a) );
    }
}
